package orxatas.travelme.manager;

import java.util.ArrayList;

import orxatas.travelme.activity.AsyncActivity;
import orxatas.travelme.entity.User;
import orxatas.travelme.sync.AsyncNoticeCode;
import orxatas.travelme.sync.SyncData.SyncDataType;
import orxatas.travelme.sync.SyncFriends;
import orxatas.travelme.sync.exceptions.ImposibleAddNewFriend;
import orxatas.travelme.sync.exceptions.ImposibleDelFriend;

/**
 * Gestor de amigos
 * Modulo encargado de satisfacer las peticiones relacionadas
 * con los amigos.
 * */
public class FriendManager {
	private AsyncActivity asyncActivity;
	static private ArrayList<Integer> friendList;
	private SyncFriends syncFriends;
	
	public FriendManager(AsyncActivity asyncActivity){
		this.asyncActivity = asyncActivity;
		syncFriends = new SyncFriends(this, asyncActivity);
		friendList = syncFriends.getFriendList();
	}
	
	/**
	 * A�adir nuevo amigo
	 * Envia una petición de amistad de un nuevo amigo.
	 * @param {String} friendMail Correo electrónico del amigo que se desea añadir.
	 * @throws ImposibleAddNewFriend 
	 * */	
	public User addNewFriend(String friendMail) throws ImposibleAddNewFriend{
		User newUser = syncFriends.addNewFriend(friendMail);
		if(newUser != null)
			friendList.add(newUser.getId());
		return newUser;
	}
	
	/**
	 * Elimina a un amigo de la lista de amigos.
	 * @param {String} friendMail Correo electronico del amigo que se desea eliminar.
	 * @throws ImposibleDelFriend 
	 * */
	public void removeFriend(int idFriend) throws ImposibleDelFriend{
		
		int pos = findFriend(idFriend);
		if(pos != -1){
			syncFriends.removeFriend(idFriend);
			friendList.remove(pos);
		}
	}
	
	/**
	 * Obtiene el listado completo de amigos.
	 * @return El listado completo de amistades del usuario.
	 * */
	public ArrayList<Integer> getFriendList(){

		return friendList;		
	}
	
	/*public void acceptInvitation(String friendMail){
		//TODO
		
	}
	public void rejectInvitation(String friendMail){
		//TODO
	}*/
	
	public Boolean isFriend(int idFriend){
		
		int pos = findFriend(idFriend);
		if(pos != -1)
			return true;
		else 
			return false;
	}
	
	private int findFriend(int idFriend){
		
		for(int i =0 ; i < friendList.size(); i++)
			if(friendList.get(i)  == idFriend)
				return i;
		return -1;
	}
	
	/**
	 * Synchronize data information.
	 * 
	 * @param nextData An optional next data to sync. Put it as a null.
	 * */
	public void synchronize(SyncDataType nextData){
		syncFriends.synchronize(nextData);
	}

}
